import os

from pynput import keyboard
from pynput.keyboard import Controller, Key, Listener

from item_Stu import Stu
import keyboard
# list_Stu = []


# 键盘按压,pass

def on_press(key):
    pass


# 检测是否释放ESC

def on_release(key):
    if key == Key.esc:
        print('ESC be pressed!')
        return False


def start_listen():
    with Listener(on_press=on_press, on_release=on_release) as listener:
        listener.join()
def load():
    # 读档
    # 如果文件不存在，直接返回，不再读档
    if not os.path.exists('student_data.txt'):
        return

    # 读档前保证students中没有数据
    global list_Stu
    list_Stu = []

    with open('student_data.txt', 'r', encoding='utf8') as f:
        for line in f:  # 每次切分f的一个学生数据
            line.strip()    # 去掉字符串两边的空格
            tokens = line.split('\t')   # 以'\t'为分隔符分割line - 返回值是list(列表)
            if len(tokens) != 4:
                print(f"当前行格式有问题: line={line}")
                continue
            # 此时切分完成

            stu = Stu(name=tokens[1], age=tokens[3], gender=tokens[2],sid=tokens[0])
            # 将元素读取到students中
            list_Stu.append(stu)
        print(f"[读取数据成功] 共读取了 {len(list_Stu)} 条数据")
        print(f'当前学号表:{Stu.id_List}')

def save():
    # 存储学生信息
    with open('student_data.txt','w',encoding='utf8') as f:
        for s in list_Stu:
            f.write(f"{s.sid}\t{s.name}\t{s.gender}\t{s.age}\n")
        print(f'[存储数据成功] 共存储了 {len(list_Stu)} 条数据')


def addStudent():
    print("------------------新生录入系统--------------------------------------------------------")

    while True :
        print("请输入新学生的姓名，性别，年龄：(输入回车退出添加系统)")
        name = input("姓名：")
        if name == '' :
            break
        age = input("年龄：")
        if age == '' :
            break
        gender = input("性别：")
        if gender == '' :
            break
        flag =0
        if len(list_Stu)!=0 :
            for s in list_Stu :
                if s.name == name :
                    flag =1
                    break
        if flag == 0:
            stu = Stu(name=name, age=age, gender=gender)
            list_Stu.append(stu)
            print("添加成功")
        else:
            print("已存在用户名，添加失败")

        print("当前录入学生名册：")
        for s in list_Stu :
            print(f'学生姓名：{s.name}，学生学号：{s.sid}',"  ",end="\n")


def updateByID():
    print("------------------学生信息修改系统--------------------------------------------------------")
    print("根据学号修改学员信息：")
    id = input("请输入学员学号：")
    flag =0
    if len(list_Stu)!= 0 :
        for s in list_Stu:
            if s.sid == id :
                flag =1
                if flag == 1:
                    print("学号正确，请输入修改信息：(若不修改某个属性则回车跳过)")
                    name = input("姓名修改为：")
                    if name != '' :
                        flag =2
                        s.name = name
                    age = input("年龄修改为：")
                    if age != '' :
                        flag = 2
                        s.age = age
                    gender = input("性别修改为：")
                    if gender != '' :
                        flag = 2
                        s.gender = gender
                break

        if flag == 0 :
            print("没找到该学号的学生")

        elif flag ==2 :
            print("修改成功")

        else:
            print("无修改信息")
    else:
        print("当前没有学生录入系统")

def deleteByID() :
    print("------------------学生信息删除系统--------------------------------------------------------")
    print("根据学号删除学员信息：")
    id = input("请输入学员学号：")
    flag = 0
    if len(list_Stu) != 0:
        for s in list_Stu:
            if s.sid == id:
                flag = 1
                if flag == 1:
                    key = input("学号正确，输入回车删除该学生信息：(如不删除则按下键盘esc)")

                    flag =2
                    if key == '':
                        flag = 1
                        Stu.id_List.remove(s.sid)
                        list_Stu.remove(s)



                break

        if flag == 0:
            print("没找到该学号的学生")

        elif flag == 2:
            print("取消删除")

        else:
            print("删除成功")
    else:
        print("当前没有学生录入系统")

def deleteByName():
    print("------------------学生信息删除系统--------------------------------------------------------")
    print("根据姓名删除学员信息：")
    name = input("请输入学员姓名：")
    flag = 0
    if len(list_Stu) != 0:
        for s in list_Stu:
            if s.name == name:
                flag = 1
                if flag == 1:
                    key = input("姓名正确，输入回车删除该学生信息：(如不删除则输入其他)")

                    flag = 2
                    if key == '':
                        flag = 1
                        Stu.id_List.remove(s.sid)
                        list_Stu.remove(s)
                break

        if flag == 0:
            print("没找到该姓名的学生")

        elif flag == 2:
            print("取消删除")

        else:
            print("删除成功")
    else:
        print("当前没有学生录入系统")
def searchByID():
    print("------------------学生信息查询系统--------------------------------------------------------")
    print("根据学号查询学员信息：")
    id = input("请输入学员学号：")
    flag = 0
    if len(list_Stu) != 0:
        for s in list_Stu:
            if s.sid == id:
                flag = 1
                if flag == 1:
                    key = input("学号正确，输入回车查询该学生信息：(如不删除则输入其他)")

                    flag = 2

                    if key == '':
                        flag=1
                        print(f'该学生的信息：姓名：{s.name},年龄：{s.age},性别：{s.gender}\n')


                break

        if flag == 0:
            print("没找到该学号的学生")

        elif flag == 2:
            print("取消查询")

        else:
            print("查询成功")
    else:
        print("当前没有学生录入系统")
def searchByName():
    print("------------------学生信息查询系统--------------------------------------------------------")
    print("根据姓名查询学员信息：")
    name = input("请输入学员姓名：")
    flag = 0
    if len(list_Stu) != 0:
        for s in list_Stu:
            if s.name == name:
                flag = 1
                if flag == 1:
                    key = input("姓名正确，输入回车查询该学生信息：(如不删除则输入其他)")

                    flag = 2
                    if key == '':
                        flag =1
                        print(f'该学生的信息：学生id:{s.sid},姓名：{s.name},年龄：{s.age},性别：{s.gender}\n')
                    if key ==  b'\x1b' :
                        flag =2


                    break

        if flag == 0:
            print("没找到该姓名的学生")

        elif flag == 2:
            print("取消查询")

        else:
            print("查询成功")
    else:
        print("当前没有学生录入系统")
def seeAll():
    print("------------------学生信息查询系统--------------------------------------------------------")
    print("显示所有录入系统的学生信息：\n")
    if len(list_Stu)!= 0 :
        print("***********************************************************************************\n")
        for s in list_Stu :
            print(f'学生ID：{s.sid},学生姓名：{s.name},学生年龄：{s.age},学生性别：{s.gender}')
        print("***********************************************************************************\n")

def menu() :

    print("****************************************")
    print("*				学生管理系统			 *")
    print("*  	    1. 添加新学生信息              *")
    print("* 	    2. 通过学号修改学生信息		 *")
    print("*		3. 通过学号删除学生信息		 *")
    print("*		4. 通过姓名删除学生信息		 *")
    print("* 	    5. 通过学号查询学生信息          *")
    print("*		6. 通过姓名查询学生信息          *")
    print("*		7. 显示所有学生信息             *")
    print("*		8. 退出系统			  		 *")
    print("****************************************")



    select_op = input("输入编号选择操作：")
    while select_op!=8 :
        if select_op == "1":
            addStudent()
        elif select_op == "2":
            updateByID()
        elif select_op == "3":
            deleteByID()
        elif select_op == "4":
            deleteByName()
        elif select_op == "5":
            searchByID()
        elif select_op == "6":
            searchByName()
        elif select_op == "7":
            seeAll()
        elif select_op == "8":
            break
        else:
            break
        print("****************************************")
        print("*				学生管理系统			 *")
        print("*  	    1. 添加新学生信息              *")
        print("* 	    2. 通过学号修改学生信息		 *")
        print("*		3. 通过学号删除学生信息		 *")
        print("*		4. 通过姓名删除学生信息		 *")
        print("* 	    5. 通过学号查询学生信息          *")
        print("*		6. 通过姓名查询学生信息          *")
        print("*		7. 显示所有学生信息             *")
        print("*		8. 退出系统			  		 *")
        print("****************************************")
        select_op = input("输入编号选择操作：")




if __name__ == '__main__':
    load()
    menu()
    save()